Hibernate Criteria API হল একটি শক্তিশালী উপায় যা Hibernate ORM ব্যবহার করে ডাইনামিক এবং টাইপ-সেফ কুয়েরি তৈরি করার জন্য ব্যবহৃত হয়। Criteria API এর মাধ্যমে, আপনি SQL এর মতো কোড না লিখে, Java কোডের মাধ্যমে ডাটাবেস কুয়েরি তৈরি করতে পারেন, যা কোডের জন্য আরও নিরাপদ এবং উন্নত।
Criteria API ব্যবহার করে Query তৈরি করার ধাপগুলো:
Hibernate-এ Criteria API ব্যবহার করার জন্য কিছু নির্দিষ্ট স্টেপ অনুসরণ করতে হয়। এই API আপনাকে Query By Example, Dynamic Queries, এবং Type-Safe Queries তৈরি করতে সহায়তা করে। এটি ডেটাবেস কুয়েরি তৈরির জন্য Session অবজেক্টের একটি অংশ হিসেবে কাজ করে।
Step 1: Hibernate Configuration Setup
প্রথমে, Hibernate কনফিগারেশন ফাইল (hibernate.cfg.xml) তৈরি করুন বা সেটআপ করুন যেখানে ডাটাবেস কনফিগারেশন ও Hibernate সেটিংস থাকবে।
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.url">jdbc:h2:mem:testdb</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>
এটি Hibernate কনফিগারেশন ফাইল যা ডাটাবেসের সাথে সংযোগ তৈরি করে এবং Hibernate এর অন্যান্য প্রপার্টি কনফিগার করে।
Step 2: Entity Class তৈরি করা
এখন Hibernate Entity ক্লাস তৈরি করুন। এখানে আমরা একটি সাধারণ Employee ক্লাস তৈরি করব।
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
private int id;
private String name;
private String department;
// Constructor, Getter and Setter methods
public Employee() {}
public Employee(int id, String name, String department) {
this.id = id;
this.name = name;
this.department = department;
}
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
}
এখানে, Employee ক্লাসটি একটি জাভা অবজেক্ট যা JPA Entity হিসেবে ডাটাবেস টেবিলের সাথে ম্যাপ হবে।
Step 3: Hibernate Criteria API Query তৈরি করা
Hibernate Criteria API ব্যবহার করে ডাইনামিক কুয়েরি তৈরি করার জন্য, প্রথমে Session অবজেক্ট থেকে Criteria অবজেক্ট তৈরি করতে হয়। তারপর Restrictions ব্যবহার করে কুয়েরি নির্দিষ্ট করা হয়।
Criteria Query উদাহরণ (Retrieve Employees with a Specific Department)
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import java.util.List;
public class EmployeeDAO {
private SessionFactory sessionFactory;
public EmployeeDAO(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public List<Employee> getEmployeesByDepartment(String department) {
// Session তৈরি করা
Session session = sessionFactory.getCurrentSession();
// Criteria API ব্যবহার করে কুয়েরি তৈরি করা
Criteria criteria = session.createCriteria(Employee.class);
criteria.add(Restrictions.eq("department", department));
// কুয়েরি চলানো এবং ফলাফল পাওয়া
List<Employee> employees = criteria.list();
return employees;
}
}
এখানে:
createCriteria(Employee.class): এটিEmployeeEntity ক্লাসের জন্য একটি Criteria অবজেক্ট তৈরি করে।Restrictions.eq("department", department): এটিdepartmentফিল্ডের মানকেdepartmentপ্যারামিটার দিয়ে ফিল্টার করে।
Step 4: Main Application
এখন MainApp ক্লাস ব্যবহার করে Criteria API কুয়েরি চালানো হবে এবং Employee ডাটাবেস থেকে ফিল্টার করা হবে।
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import java.util.List;
public class MainApp {
public static void main(String[] args) {
// SessionFactory তৈরি করা
SessionFactory sessionFactory = new Configuration().configure().addAnnotatedClass(Employee.class).buildSessionFactory();
// EmployeeDAO ক্লাস ইনস্ট্যান্স তৈরি করা
EmployeeDAO employeeDAO = new EmployeeDAO(sessionFactory);
// Department এর উপর ভিত্তি করে Employees সংগ্রহ করা
List<Employee> employees = employeeDAO.getEmployeesByDepartment("IT");
// Employees এর তথ্য প্রিন্ট করা
for (Employee employee : employees) {
System.out.println("ID: " + employee.getId() + ", Name: " + employee.getName() + ", Department: " + employee.getDepartment());
}
// SessionFactory বন্ধ করা
sessionFactory.close();
}
}
এখানে:
getEmployeesByDepartment("IT")মেথডের মাধ্যমে "IT" ডিপার্টমেন্টের সমস্তEmployeeঅবজেক্ট ফিল্টার করা হচ্ছে।- সমস্ত
Employeeঅবজেক্টের তথ্য কনসোলে প্রিন্ট করা হচ্ছে।
Step 5: Output
যদি আপনার ডাটাবেসে "IT" ডিপার্টমেন্টের কোনো Employee অবজেক্ট থাকে, তাহলে কনসোলে এমন কিছু আউটপুট দেখাবে:
ID: 1, Name: John Doe, Department: IT
ID: 2, Name: Jane Doe, Department: IT
Step 6: Additional Criteria API Features
Hibernate Criteria API আরও অনেক শক্তিশালী ফিচার প্রদান করে যেমন:
Restrictions: বিভিন্ন ধরনের কন্ডিশনাল ফিল্টার (যেমনeq,gt,lt,like,in, ইত্যাদি) অ্যাপ্লাই করতে ব্যবহার করা হয়।Projection: ফলাফল থেকে নির্দিষ্ট ফিল্ড বা কলাম নির্বাচন করতে ব্যবহার করা হয় (যেমনselectSQL এ)।criteria.setProjection(Projections.property("name"));Order: ফলাফলগুলি সাজানোর জন্য।criteria.addOrder(Order.asc("name"));Pagination: ডাটাবেসে একসাথে রেকর্ডের পরিমাণ সীমিত করার জন্য (যেমনLIMITSQL এ)।criteria.setFirstResult(0); criteria.setMaxResults(10);
Hibernate Criteria API একটি শক্তিশালী পদ্ধতি যা আপনাকে ডাইনামিক এবং টাইপ-সেফ কুয়েরি তৈরি করতে সহায়তা করে। এটি SQL স্টেটমেন্ট লেখার পরিবর্তে Java কোডের মাধ্যমে ডাটাবেস কুয়েরি তৈরি করার জন্য একটি পরিষ্কার এবং মডুলার পদ্ধতি প্রদান করে। Criteria API দিয়ে আপনি সহজেই ডেটা ফিল্টারিং, অর্ডারিং, এবং পেজিনেশন করতে পারবেন, যা আপনার ডাটাবেস অপারেশনকে আরও কার্যকরী এবং মডুলার করে তোলে।
Read more